package entity

import (
	dom "a-common/domain"
)

// SysMenu 系统菜单表
type SysMenu struct {
	Id             int64  `xorm:"pk autoincr notnull"`                 // 菜单ID
	Pid            int64  `xorm:"default(0) notnull"`                  // 父菜单ID
	Type           string `xorm:"varchar(10) notnull"`                 // 类型:menu_dir=菜单目录,menu=菜单项,button=页面按钮
	Title          string `xorm:"varchar(50) notnull"`                 // 标题
	Name           string `xorm:"varchar(50) notnull"`                 // 菜单名称
	Path           string `xorm:"varchar(100) notnull"`                // 路由地址
	Icon           string `xorm:"varchar(50) notnull"`                 // 菜单图标
	MenuType       string `xorm:"varchar(10) notnull"`                 // 菜单类型:tab=选项卡,link=链接,iframe=Iframe
	Url            string `xorm:"varchar(255) notnull"`                // Url
	Component      string `xorm:"varchar(100) notnull"`                // 组件路径
	Keepalive      string `xorm:"default(1) notnull"`                  // 缓存:0=关闭,1=开启
	Extend         string `xorm:"varchar(20) default('none') notnull"` // 扩展属性:none=无,add_rules_only=只添加为路由,add_menu_only=只添加为菜单
	Weigh          int    `xorm:"default(1) notnull"`                  // 权重
	Status         string `xorm:"varchar(1) notnull"`                  // 状态:0=禁用,1=启用
	dom.BaseStruct `xorm:"extends"`
}

// SysMenuVo 映射
type SysMenuVo struct {
	Id        int64  `json:"id" xorm:"pk"`
	Pid       int64  `json:"pid"`
	Type      string `json:"type"`
	Title     string `json:"title"`
	Name      string `json:"name"`
	Path      string `json:"path"`
	Icon      string `json:"icon"`
	MenuType  string `json:"menu_type"`
	Url       string `json:"url"`
	Component string `json:"component"`
	Keepalive string `json:"keepalive"`
	Extend    string `json:"extend"`
	Weigh     int    `json:"weigh"`
	Status    string `json:"status"`
}

// SysMenuPageVo 页面
type SysMenuPageVo struct {
	SysMenuVo    `xorm:"extends"`
	dom.BaseJson `xorm:"extends"`
}

// SysMenuDto 传输
type SysMenuDto struct {
	SysMenuPageVo
}

// RouterVo 前端路由结构
type RouterVo struct {
	Name       string     `json:"name,omitempty"`       // 路由名字
	Path       string     `json:"path,omitempty"`       // 路由地址
	Hidden     bool       `json:"hidden,omitempty"`     // 是否隐藏路由，当设置 true 的时候该路由不会再侧边栏出现
	Redirect   string     `json:"redirect,omitempty"`   // 重定向地址，当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
	Component  string     `json:"component,omitempty"`  // 组件地址
	Query      string     `json:"query,omitempty"`      // 路由参数：如 {"id": 1, "name": "ry"}
	AlwaysShow bool       `json:"alwaysShow,omitempty"` // 当你一个路由下面的 children 声明的路由大于1个时，自动会变成嵌套的模式--如组件页面
	Meta       MetaVo     `json:"meta,omitempty"`       // 其他元素
	Children   []RouterVo `json:"children,omitempty"`   // 子路由
}

// MetaVo 前端面包屑结构
type MetaVo struct {
	Title   string `json:"title,omitempty"`   // 设置该路由在侧边栏和面包屑中展示的名字
	Icon    string `json:"icon,omitempty"`    // 设置该路由的图标，对应路径src/assets/icons/svg
	NoCache bool   `json:"noCache,omitempty"` // 设置为true，则不会被 <keep-alive>缓存
	Link    string `json:"line,omitempty"`    // 内链地址（http(s)://开头）
}
